#ifndef TERMINAL512_H
#define TERMINAL512_H

using namespace std;

#include <string>
#include <iostream>
#include "tiposB.h"

//#include "chofer.h"
//include "interno.h"
//#include "Conj.h"
//#include "cola.h"
//#include "coleconviaje.h"
//#include "Dicc.h"
//#include "conjAc.h"
//#include "iterconj.h"
//#include "itercola.h"
class Terminal {
	public:
	// generadores
	void operator =(const Terminal &t);
	bool operator ==(const Terminal &t)const;
	bool operator !=(const Terminal &t) const;
	Terminal(int cantDarsenas,  const Conj<Chofer> &ConjChofer,const Conj<Interno> &ConjInterno);

	Terminal& saleInterno();
	Terminal& llegaInterno(IdInterno, int nroDarsena);

	// observadores
	int cantDarsenas() const;
	bool esInterno(IdInterno);
	const Interno elInterno(IdInterno) const;
	bool esChofer(IdChofer) const;
	const Chofer elChofer(IdChofer) const;
	int internosEnDarsena(int nroDarsena) const;
	IdInterno internoEnPosicion(int nroDarsena, int posicion) const;
	IdChofer quienManeja(IdInterno) ;//const;
	bool esperandoChofer() const;
	int cantViajesInterno(IdInterno) const;
	bool viajando(IdInterno) const;

	// destructor
	~Terminal();

	private:
	int cantdarsenas;
	bool estaTrabado;
	Dicc<colectivoConViajes,Chofer> ColectivosViajando;
	conjAc<Chofer> ChoferesEsperandoViejos;
	conjAc <Chofer> ChoferesEsperandoJovenes;

    Cola <colectivoConViajes>* darsenas;
    Chofer DameUnChofer(void);
    bool AlgunoEnDarsena(void)const;

    bool validaConstructor(int cantDarsenas, const Conj<Chofer> &chof, const Conj<Interno> &inter);



};

#endif
